package org.example.classtopia.Service;

import org.example.classtopia.Model.dto.PostCreateDTO;
import org.example.classtopia.Model.dto.PostUpdateDTO;
import org.example.classtopia.Model.Entity.Post;
import org.example.classtopia.Model.vo.PageResultVO;
import org.example.classtopia.Model.vo.PostPreviewVO;
import org.example.classtopia.Model.vo.PostVO;
import org.example.classtopia.Model.vo.MyPostSimpleVO;

import java.util.List;

public interface PostService {

    // 创建帖子
    Post createPost(PostCreateDTO postCreateDTO);

    // 根据ID获取帖子详情
    PostVO getPostById(Long id);

    // 根据作者ID分页获取帖子列表
    PageResultVO<PostVO> getPostsByAuthorId(Long authorId, int pageNum, int pageSize);

    // 更新帖子
    boolean updatePost(PostUpdateDTO postUpdateDTO);

    // 删除帖子（逻辑删除）
    boolean deletePostById(Long id);

    // 分页获取所有帖子
    List<PostVO> getAllPosts(int offset, int limit);

    // 搜索帖子
    PageResultVO<PostVO> searchPosts(String keyword, int pageNum, int pageSize);

    List<PostPreviewVO> getPostPreviews(int offset, int size);

    /**
     * 查询所有帖子（不论状态）
     */
    List<PostPreviewVO> getAllPostPreviews(int offset, int size);

    PageResultVO<Post> getPostsByCategory(Long categoryId, int pageNum, int pageSize);

    /**
     * 查询所有帖子总数（不论状态，管理员专用）
     */
    long countAllPosts();

    /**
     * 查询所有正常状态（如status=0）的帖子总数
     */
    long countNormalPosts();

    List<PostPreviewVO> getAllPostPreviewsByCategory(Long categoryId, int offset, int size);
    long countAllPostsByCategory(Long categoryId);
    List<PostPreviewVO> getPostPreviewsByCategory(Long categoryId, int offset, int size);
    long countNormalPostsByCategory(Long categoryId);

    List<MyPostSimpleVO> getMyAllPosts(Long authorId);
    List<MyPostSimpleVO> getMyAllPostsPaged(Long authorId, int offset, int size);
    long countMyAllPosts(Long authorId);
}
